package run.halo.app.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import run.halo.app.exception.ServiceException;
import run.halo.app.model.entity.TodoList;
import run.halo.app.repository.TodoListRepository;
import run.halo.app.service.TodoListService;

import javax.annotation.Resource;
import java.util.Comparator;
import java.util.List;

@Service("todoListService")
@Slf4j
public class ToDoListServiceImpl implements TodoListService {

    @Resource(name = "todoListRepository")
    TodoListRepository todoListRepository;

    @Override
    public List<TodoList> listToDosByToDoStatus(Integer status, Integer sort) {
        Assert.notNull(status, "status不能为null");
        List<TodoList> allByToDoStatus = todoListRepository.findAllByToDoStatus(status);
        final Integer sort1 = sort;
//        allByToDoStatus.sort(new Comparator<TodoList>() {
//            @Override
//            public int compare(TodoList t1, TodoList t2) {
//                boolean flag = sort1 > 0;
//                int res = 0;
//                long time1 = t1.getTodotimeDeadline().getTime();
//                long time2 = t2.getTodotimeDeadline().getTime();
//                if (time1 == time2) return 0;
//                else res = time1 - time2 > 0 ? 1 : -1;
//                if (flag) res = Math.negateExact(res);
//                return res;
//            }
//        });
        return allByToDoStatus;
    }

    @Override
    public List<TodoList> listToDosByToDoType(Integer status, Integer sort) {
        Assert.notNull(status, "status不能为null");
        List<TodoList> allByToDoStatus = todoListRepository.findAllByTodoType(status);
        final Integer sort1 = sort;
//        allByToDoStatus.sort(new Comparator<TodoList>() {
//            @Override
//            public int compare(TodoList t1, TodoList t2) {
//                boolean flag = sort1 > 0;
//                int res = 0;
//                long time1 = t1.getTodotimeDeadline().getTime();
//                long time2 = t2.getTodotimeDeadline().getTime();
//                if (time1 == time2) return 0;
//                else res = time1 - time2 > 0 ? 1 : -1;
//                if (flag) res = Math.negateExact(res);
//                return res;
//            }
//        });
        return allByToDoStatus;
    }

    @Override
    public void deleteById(Integer id) {
        try {
            todoListRepository.deleteById(id);
        } catch (Exception e) {
            log.error("删除待办事项失败,待办事项id为: {}", id);
            throw new ServiceException("删除待办事项失败");
        }
    }

    @Override
    public int updateStatus(Integer id, Integer status) {
        return todoListRepository.updateStatus(id, status);
    }

    @Override
    public TodoList saveToDo(TodoList s) {
        return todoListRepository.save(s);
    }

    @Override
    public List<TodoList> saveToDos(List<TodoList> todos) {
        return todoListRepository.saveAll(todos);
    }
}
